
<%@page import="javax.sql.rowset.serial.SerialBlob"%>
<%@page import="java.io.*"%>
<%@ page import="tmanager.*" import="java.sql.*" %>
<%@ include file="/WEB-INF/sql.jsp" %>
<%
    if (session.getAttribute("tmanager.studente") == null && (session.getAttribute("tmanager.professore") == null || session.getAttribute("tmanager.idStudente") == null)) { //nel caso di sessione non corretta, faccio redirect alla home
        response.sendRedirect("../index.jsp");
        return;
    }


    response.setHeader("Cache-Control", "no-cache");
    response.setHeader("Pragma", "no-cache");
    response.setDateHeader("Expires", 0);

    //recupero dati dalla sessione
    Studente s = (Studente) session.getAttribute("tmanager.studente");
    Professore p = (Professore) session.getAttribute("tmanager.professore");
    Integer idStudente = (Integer) session.getAttribute("tmanager.idStudente");


    //inizializzazione variabili utilizzate
    String contentType = request.getContentType();
    String fileName = "";
    long size = 0;
    Blob blob = null;
    boolean fileCaricato = false;


    if (contentType != null && contentType.indexOf("multipart/form-data") >= 0) { //procedo al caricamento del file proveniente dalla richiesta
        Part p1 = request.getPart("file");
        String intestazionePart = p1.toString();
        String[] splits = intestazionePart.split("=|,");
        fileName = splits[1];
        int punto = fileName.lastIndexOf(".");
        String estensione = fileName.substring(punto + 1);
        size = p1.getSize();


        InputStream is = p1.getInputStream();
        byte dataBytes[] = new byte[(int) p1.getSize()]; //conterrà i byte del file caricato
        int ch = is.read();
        int pos = 0;
        while (ch != -1) {
            dataBytes[pos] = (byte) ch;
            ch = is.read();
            pos++;
        }

        if (size > 0) {
            blob = new SerialBlob(dataBytes); //creo il blob con il file

            tmanager.File f = new tmanager.File(); //creo un oggetto di tipo tmanager.File che conterrà i dati identificativi del file
            java.util.Date date = new java.util.Date();
            long t = date.getTime();
            f.setTimestamp(t);
            f.setNomeFile(fileName);
            f.setTmpNome(fileName);
            f.setTipoFile(estensione);
            f.setSize(blob.length());

            if (s != null) {
                f.setIdStudente(s.getMatricola());
                f.setIdProfessore(s.getRelatore());
                f.setProprietario(s.getNome() + " " + s.getCognome());
            } else if (p != null && idStudente != null) {
                f.setIdStudente(idStudente);
                f.setIdProfessore(p.getIdentificativo());
                f.setProprietario(p.getNome() + " " + p.getCognome());
            } else {
                //dati non completi
                session.setAttribute("tmanager.erroreTitolo", "Errore di accesso");
                session.setAttribute("tmanager.erroreMessaggio", "Siamo spiacenti ma la sessione risulta scaduta o non correttamente definita.");
                response.sendRedirect("../errore.jsp");
                return;
            }

            try { //provo a salvare il file sul database.
                fileCaricato = caricaFile(f, blob);
            } catch (SQLException e) {
                fileCaricato = false;
                session.setAttribute("tmanager.erroreTitolo", "Errore nel salvataggio file su database");
                session.setAttribute("tmanager.erroreMessaggio", "Siamo spiacenti, ma si è verificato un errore durante la connessione al database. La procedura di salvataggio file su database non ha avuto successo. Riprovare in seguito.");
                response.sendRedirect("../errore.jsp");
                return;
            }
            

            if (fileCaricato && s != null) { //file caricato correttamente e utente che carica è studente
                String profEmail = "";
                try {
                    Professore profTemp = getProfessoreFromDB(s.getRelatore());
                    profEmail = profTemp.getEmail();
                } catch (SQLException e) {
                    session.setAttribute("tmanager.erroreTitolo", "Errore durante il recupero dati del Professore");
                    session.setAttribute("tmanager.erroreMessaggio", "Siamo spiacenti, si è verificato un errore durante la connessione al database. La procedura di recupero dei dati professore per l'invio di email non ha avuto successo. Il file caricato risulta però correttamente caricato.");
                    response.sendRedirect("../errore.jsp");
                    return;
                }

                EMailManager em = new EMailManager();

                boolean emailInviata = em.inviaEMail(profEmail, "Sistema T-Manager: nuovo upload di file", "Buongiorno, \n"
                        + "il tesista " + s.getNome() + " " + s.getCognome() + " ha appena condiviso il file: " + f.getNomeFile() + ". \n"
                        + "Accedi al sistema T-Manager per prendere visione dei file condivisi.\n"
                        + "\n"
                        + "Cordiali saluti\n");
                if (!emailInviata) {
                    session.setAttribute("tmanager.erroreTitolo", "Errore durante la procedura di invio mail");
                    session.setAttribute("tmanager.erroreMessaggio", "Siamo spiacenti, si è verificato un errore durante l'invio della mail di notifica. Provare ad effettuare l'operazione nuovamente.");
                    response.sendRedirect("../errore.jsp");
                    return;
                }
            } else if (fileCaricato && p != null) { //file caricato correttamente e utente è professore
                String studenteEmail = "";
                try {
                    Studente studTemp = getStudenteFromDB(sqlDatiStudente, idStudente);
                    studenteEmail = studTemp.getEmail();

                } catch (SQLException e) {
                    session.setAttribute("tmanager.erroreTitolo", "Errore durante il recupero dati dello Studente");
                    session.setAttribute("tmanager.erroreMessaggio", "Siamo spiacenti, si è verificato un errore durante la connessione al database. La procedura di recupero dei dati studente per l\'invio email non ha avuto successo. Il file caricato risulta però correttamente caricato.");

                    response.sendRedirect("../errore.jsp");
                    return;
                }

                EMailManager em = new EMailManager();

                boolean emailInviata = em.inviaEMail(studenteEmail, "Sistema T-Manager: nuovo upload di file", "Buongiorno, \n"
                        + "il tuo relatore " + p.getNome() + " " + p.getCognome() + " ha appena condiviso il file " + f.getNomeFile() + " con te. \n"
                        + "Accedi al sistema T-Manager per prendere visione dei file condivisi.\n"
                        + "\n"
                        + "Cordiali saluti\n");
                if (!emailInviata) {
                    session.setAttribute("tmanager.erroreTitolo", "Errore durante la procedura di invio mail");
                    session.setAttribute("tmanager.erroreMessaggio", "Siamo spiacenti, si è verificato un errore durante l'invio della mail di notifica. Provare ad effettuare l'operazione nuovamente.");
                    response.sendRedirect("../errore.jsp");
                    return;
                }
            }

        }

    }
%>

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Carica un file</title>
        <link rel="stylesheet" type="text/css" href="../CSS/defaultStyle.css" />
    </head>
    <body>
        <%@include file="../WEB-INF/jspf/header.jspf" %>
        <script type="text/javascript">
          
            function inizializza(){
                $("#HfileUpload").addClass("paginaCorrente");
            };
            $(document).ready(inizializza);
        </script>
        <div id="corpo">
            <div id="corpoSx">
                <%if (fileCaricato) {%>
                <h2><img id="ok" src="../Immagini/Actions-dialog-ok-apply-icon50px.png"/>File caricato correttamente.</h2>
                <a href="../index.jsp"><img src="../Immagini/Home-icon30.png"/>Home Page</a>

                <%} else {%>
                <h2>Carica un file:</h2>
                <div class="modificaProfilo">
                    <form class="salvaFile" method="post" enctype="multipart/form-data" action="../FileMng/fileUpload.jsp">
                        <fieldset>
                            <b>Scegli un file da caricare:</b>
                            <INPUT NAME="file" TYPE="file">
                            <INPUT TYPE="submit" id="inviaFile" VALUE="Invia file&gt;&gt;" >
                        </fieldset>
                    </form>
                </div>
                <%}%>
            </div>
        </div>
        <hr/>
        <%@include file="../WEB-INF/jspf/footer.jspf" %>
    </body>
</html>
